package day05;

// 求连续子数组最大和


import java.util.Scanner;

// 正确版本
public class Main2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
        }

        // 开始进行练习子数组求max
        int sum = arr[0];
        int max = arr[0];

        for (int i = 1; i < arr.length; i++) {
            // 更新sum的值,注意不是max，只有在比较厚才能确定max！
            sum = getMax(sum+arr[i],arr[i]);
            if(sum >= max) { // 大于等于都可以更新
                max = sum;
            }
        }

        System.out.println(max);
    }

    // 获取两个数中的较大值
    private static int getMax(int i, int j) {
        return (i>j)? i:j;
    }

}






// 错误版本
//import java.util.Scanner;
//
//public class Main2 {
//    public static void main(String[] args) {
//        Scanner in = new Scanner(System.in);
//        int n = in.nextInt();
//        int[] arr = new int[100_000];
//        for (int i = 0; i < n; i++) {
//            arr[i] = in.nextInt();
//        }
//        // 求最大连续数组和：一旦出现负数，就需要计算验证：与后面的数相加是否大于0
//        int sum = 0;
//        int tmp = 0;
//        for (int i = 0; i < n; i++) {
//            if(arr[i] < 0) {
//                for (int j = i; j < arr.length; j++) {
//                    tmp += arr[j];
//                    if(tmp > 0 && tmp>tmp+arr[j+1]) {
//                        sum += tmp;
//                        break;
//                    }
//                }
//            } else {
//                sum += arr[i];
//            }
//        }
//        System.out.println(sum);
//    }
//}
